// 路由配置 - 重构版本
import { createRouter, createWebHistory } from 'vue-router';
import MainLayout from '@/views/_core/layout/MainLayout.vue';
import { useUserStore } from '@/stores/user.js'; 

// 1. 公共路由（无需布局）
const publicRoutes = [
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/_core/authentication/Login.vue') 
  }
];

// 2. 动态内容组件 - 根据用户角色渲染不同内容
const DynamicDashboard = () => import('@/components/layout/DynamicDashboard.vue');
const DynamicProfile = () => import('@/components/layout/DynamicProfile.vue');

// 3. 应用路由 - 统一布局，动态内容
const appRoutes = [
  {
    path: 'dashboard',
    name: 'Dashboard',
    component: DynamicDashboard,
    meta: { title: '主页', requiresAuth: true }
  },
  {
    path: 'profile',
    name: 'Profile', 
    component: DynamicProfile,
    meta: { title: '个人信息', requiresAuth: true }
  },
  // 学生专属功能路由
  {
    path: 'information-submit',
    name: 'InformationSubmit',
    component: () => import('@/views/student/InfoSubmit.vue'),
    meta: { title: '信息提交', role: 'student' }
  },
  {
    path: 'payment',
    name: 'Payment',
    component: () => import('@/views/student/Payment.vue'),
    meta: { title: '在线缴费', role: 'student' }
  },
  {
    path: 'information-query',
    name: 'InformationQuery',
    component: () => import('@/views/student/InformationQuery.vue'),
    meta: { title: '信息查询', role: 'student' }
  },
  {
    path: 'notifications',
    name: 'Notifications',
    component: () => import('@/views/student/Notifications.vue'),
    meta: { title: '通知公告', role: 'student' }
  },
  {
    path: 'schedule',
    name: 'Schedule',
    component: () => import('@/views/student/Schedule.vue'),
    meta: { title: '日常安排', role: 'student' }
  },
  {
    path: 'contact',
    name: 'Contact',
    component: () => import('@/views/student/Contact.vue'),
    meta: { title: '联系我们', role: 'student' }
  },
  // 管理员专属功能路由
  {
    path: 'users',
    name: 'UserManagement',
    component: () => import('@/views/admin/UserManagement.vue'),
    meta: { title: '用户管理', role: 'admin' }
  }
];

// 4. 组合所有路由
const routes = [
  ...publicRoutes,
  {
    path: '/',
    component: MainLayout,
    meta: { requiresAuth: true },
    children: appRoutes,
    redirect: (to) => {
      const userStore = useUserStore()
      
      // 检查localStorage中是否有用户信息
      const loginUser = localStorage.getItem('loginUser')
      if (!loginUser) {
        console.log('未找到用户信息，重定向到登录页面')
        return '/login'
      }
      
      // 确保用户状态已初始化
      if (!userStore.role) {
        userStore.initRole()
      }
      
      const role = userStore.role
      console.log('根路径重定向，当前角色:', role)
      
      // 如果仍然没有角色信息，重定向到登录页面
      if (!role) {
        console.log('无法确定用户角色，重定向到登录页面')
        return '/login'
      }
      
      // 统一重定向到dashboard，由动态组件根据角色渲染内容
      return '/dashboard'
    }
  },
  // 兜底路由，匹配所有未定义的路径
  {
    path: '/:pathMatch(.*)*',
    redirect: '/' // 未知路径重定向到根路径（会触发上面的动态重定向）
  },
];

const router = createRouter({
    history: createWebHistory(),
    routes
});

// 路由守卫 - 重构版本
router.beforeEach((to, from, next) => {
  console.log('路由守卫 - 访问路径:', to.path)
  
  // 公共路由直接放行
  const isPublic = publicRoutes.some(route => to.path === route.path)
  if (isPublic) {
    console.log('路由守卫 - 公共路由，直接放行')
    next()
    return
  }

  // 非公共路由需要验证登录
  const userStore = useUserStore()
  
  // 检查localStorage中的用户信息
  const loginUser = localStorage.getItem('loginUser')
  console.log('路由守卫 - localStorage用户信息:', loginUser ? '存在' : '不存在')
  
  if (!loginUser) {
    console.log('路由守卫 - 未找到用户信息，重定向到登录页')
    next('/login')
    return
  }
  
  // 如果localStorage有用户信息但store中没有，重新初始化
  if (!userStore.role) {
    console.log('路由守卫 - 初始化用户角色')
    userStore.initRole()
  }
  
  const userRole = userStore.role
  console.log('路由守卫 - 当前用户角色:', userRole)

  if (!userRole) {
    console.log('路由守卫 - 无法确定用户角色，重定向到登录页')
    next('/login')
    return
  }

  // 角色权限校验逻辑 - 基于路由meta信息
  if (to.meta && to.meta.role) {
    if (to.meta.role !== userRole) {
      console.log(`路由守卫 - 角色不匹配，需要${to.meta.role}，当前${userRole}，重定向到主页`)
      next('/dashboard')
      return
    }
  }

  // 处理根路径访问
  if (to.path === '/') {
    console.log('路由守卫 - 根路径访问，重定向到主页')
    next('/dashboard')
    return
  }

  console.log('路由守卫 - 权限验证通过，允许访问')
  next()
})

export default router;